package ws_server

import "time"

type FrameType uint8

const (
	FramePing  FrameType = 0x0
	FrameData  FrameType = 0x1
	FrameAck   FrameType = 0x2 // ack消息
	FrameNoAck FrameType = 0x3 // 无需进行ack的消息
	FrameErr   FrameType = 0x6
	//FrameHeaders      FrameType = 0x1
	//FramePriority     FrameType = 0x2
	//FrameRSTStream    FrameType = 0x3
	//FrameSettings     FrameType = 0x4
	//FramePushPromise  FrameType = 0x5
	//FrameGoAway       FrameType = 0x7
	//FrameWindowUpdate FrameType = 0x8
	//FrameContinuation FrameType = 0x9
)

type Message struct {
	FrameType FrameType `json:"frame_type"`
	Method    string    `json:"method"`
	FromId    string    `json:"form_id"`   // 发送者id
	Data      any       `json:"data"`      // json解析为map[string]interface{}类型
	Id        string    `json:"id"`        // 消息id
	AckSeq    int       `json:"ack_seq"`   // ack的确认序号
	AckTime   time.Time `json:"ack_time"`  // 向目标方发送ack的时间点
	ErrCount  int       `json:"err_count"` // 统计失败的次数
}

func NewMessage(fromId string, data any) *Message {
	return &Message{
		FrameType: FrameData,
		FromId:    fromId,
		Data:      data,
	}
}

func NewErrorMessage(err error) *Message {
	return &Message{
		FrameType: FrameErr,
		Data:      err.Error(),
	}
}
